<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>this</title>
</head>
<body>
    <script>
        ;(function(){
            /*******callee|caller*******/
            // callee在那个函数里就指向那个函数
            function test(a, b, c){
                console.log(arguments.callee);
                console.log(arguments.callee.length);
                console.log(test.length);
                console.log(arguments.length);
            }
            test(1, 2);

            console.log('------分割线------');

            // 当有匿名函数的时候就可以使用callee
            var sum = (function(n){
                if(n <= 1){
                    return 1;
                }
                return n + arguments.callee(n - 1);
            })(6);

            console.log(sum);

            console.log('------分割线------');
            // caller 调用当前函数的函数引用，即谁调用test2，就返回当前调用函数test1
            // 弊端：严格模式下，会报错
            'use strict';
            
            test1();
            function test1(){
                test2();
            }
            function test2(){
                console.log(test2.caller);
            }

        })()
    </script>
</body>
</html>